// 示例二：两个人AB通过一个账户A在柜台取钱（100元）和B在ATM机取钱（200元）。
 
// 程序分析：钱的数量要设置成一个静态的变量。两个人要取的同一个对象值。

public class Bank {
    static int money = 1000;//假设一个账户有1000块钱

    public Bank(int money)
    {
        this.money = money;
    }

    //柜台取钱
    public void Counter(int money)
    {
        Bank.money -= money;
        System.out.println("A取走了" + money + "还剩下" + (Bank.money));  
    }

    //ATM取钱
    public void ATM(int money)
    {
        Bank.money -= money;//取钱后总数减少  
        System.out.println("B取走了" + money + "还剩下" + (Bank.money)); 
    }
}

class PersonA extends Thread{
    //创建银行对象
    Bank bank;

    public PersonA(Bank bank)
    {
        this.bank = bank;
    }

    public void run()
    {
        while(Bank.money >= 100)
        {
            bank.Counter(100);//每次取100块
        }
        try{
            sleep(100);
        }
        catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

class PersonB extends Thread {  
    // 创建银行对象  
    Bank bank;  
    // 通过构造器传入银行对象，确保两个人进入的是一个银行  
    public PersonB(Bank bank) {  
        this.bank = bank;  
    }  
    public void run() {  
        while (Bank.money >= 200) {  
           bank.ATM(200);// 每次取200块  
           try {  
                sleep(100);// 取完休息0.1秒  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}  

class Main{
    public static void main(String[] args)
    {
        Bank bank = new Bank(1000);
        PersonA pA = new PersonA(bank);
        PersonB pB = new PersonB(bank);
        pA.start();
        pB.start();
    }
}